package com.sunwayhorizo.health.platform.security.dao;

import java.util.List;

import com.sunwayhorizo.health.platform.security.persistent.SecurityRole;

public interface SecurityRoleDao {
	
	/**
	 * 新增角色级联包含 permissionRoles，accountRoles，accRolePermissions
	 * @param role 实体   
	 * @return 返回新增的实体
	 */
	SecurityRole newSecurityRole(SecurityRole role);
	
	/**
	 * 批量删除角色级联包含 permissionRoles，accountRoles，accRolePermissions
	 * @param list 字符串List   
	 */
	void deleteSecurityRole(List<String> list);
	
	/**
	 * 更新角色级联包含 permissionRoles，accountRoles，不包含 accRolePermissions
	 * @param role 实体   
	 * @return 返回更新的实体
	 */
	SecurityRole updateSecurityRole(SecurityRole role);
	
	/**
	 * 查询角色列表
	 * @return 返回查询的实体列表
	 */
	List<SecurityRole> findSecurityRoleList();
	
	/**
     * 查询根节点之外的角色列表成功
     * @return 返回查询的实体列表
     */
    List<SecurityRole> findSecurityRoleListWithOutRootNode();
	
	/**
	 * 查询角色列表以及父角色(一次读取)
	 * @return 返回查询的实体列表
	 */
	List<SecurityRole> findSecurityRoleListWithFatherRole();
	
	/**
	 * 通过账号Id查询角色列表(联合屏蔽表)
	 * @param accountId 实体Id
	 * @return 返回查询的实体列表
	 */
	List<SecurityRole> findSecurityRoleListByAccountIdWithScreen(String accountId);
	
	/**
	 * 通过账号Id查询角色列表(不联合屏蔽表)
	 * @param accountId 实体Id
	 * @return 返回查询的实体列表
	 */
	List<SecurityRole> findSecurityRoleListByAccountIdWithOutScreen(String accountId);
	
	/**
	 * 通过角色Id查询角色的详细信息
	 * @param roleId 实体Id
	 * @return 返回查询到的实体
	 */
	SecurityRole findSecurityRoleDetailById(String roleId);
	
	/**
	 * 通过角色名称查询角色的详细信息
	 * @param roleName 实体名称
	 * @return 返回查询到的实体
	 */
	SecurityRole findSecurityRoleDetailByName(String roleName);
}